/*
 * gwGpio.h
 *
 *  Created on: 2021��6��11��
 *      Author: Administrator
 */

#ifndef SRC_GPIO_GWGPIO_H_
#define SRC_GPIO_GWGPIO_H_

#include "../utility.h"
#include "xgpio.h"

#define GPIO_0_DEVICE_ID        XPAR_GPIO_0_DEVICE_ID
#define GPIO_0_REG_BASEADDR	XPAR_GPIO_0_BASEADDR

#define GPIO_1_DEVICE_ID        XPAR_GPIO_1_DEVICE_ID

#define USER_CHANNEL	1

#define OUT_DIR     1
#define IN_DIR      0

#define XGpio_GetDataDirection(InstancePtr) \
        XGpio_GetDataDirection(InstancePtr, USER_CHANNEL)

#define XGpio_SetDataDirection(InstancePtr, DirectionMask) \
        XGpio_SetDataDirection(InstancePtr, USER_CHANNEL, DirectionMask)

#define XGpio_DiscreteRead(InstancePtr) \
        XGpio_DiscreteRead(InstancePtr, USER_CHANNEL)

#define XGpio_DiscreteWrite(InstancePtr, Data) \
        XGpio_DiscreteWrite(InstancePtr, USER_CHANNEL, Data)

#define XGpio_DiscreteSet(InstancePtr, Mask) \
        XGpio_DiscreteSet(InstancePtr, USER_CHANNEL, Mask)

#define XGpio_DiscreteClear(InstancePtr, Mask) \
        XGpio_DiscreteClear(InstancePtr, USER_CHANNEL, Mask)



/*********************  gpio 0  *********************/
#define O_LED1_T          0x80000000
#define O_LED2_T          0x40000000
#define I_PG_DONE         0x20000000
#define I_7417_OTI        0x10000000

#define O_SFP_RESETL      0x08000000
#define O_SFP_RXEN        0x04000000
#define O_SFP_TXEN        0x02000000
#define I_SFP_ALERT       0x01000000

#define I_SFP_SD          0x00800000
#define O_BEAMCLK_DIR     0x00400000
#define I_BEAMCLK         0x00200000
#define O_BEAMCLK         0x00100000

#define O_LVDS1_DIR       0x00080000
#define I_LVDS1           0x00040000
#define O_LVDS1           0x00020000
#define O_BEAMDATA_DIR    0x00010000

#define I_BEAMDATA        0x00008000
#define O_BEAMDATA        0x00004000
#define O_LVDS2_DIR       0x00002000
#define I_LVDS2           0x00001000

#define O_LVDS2           0x00000800
#define O_TR_CTRL         0x00000400
#define O_BEAM_TR         0x00000200
#define O_TSL_DIR         0x00000100

#define IO_TS1            0x00000080
#define O_TS2_DIR         0x00000040
#define IO_TS2            0x00000020
#define O_TS3_DIR         0x00000010

#define IO_TS3            0x00000008
#define O_TS4_DIR         0x00000004
#define IO_TS4            0x00000002
#define O_TS5_DIR         0x00000001


/*********************  gpio 1  *********************/
#define FLAG_GPIO_1             0x90000000

#define O_SOFT_RST           FLAG_GPIO_1 + 0x00400000 // 22
#define O_SYNC_TO_PL         FLAG_GPIO_1 + 0x00200000
#define I_TX_SYNC            FLAG_GPIO_1 + 0x00100000

#define I_RX_SYNC            FLAG_GPIO_1 + 0x00080000
#define I_SFP_LINKSTATE      FLAG_GPIO_1 + 0x00040000
#define IO_TS5               FLAG_GPIO_1 + 0x00020000 //17
#define O_TS6_DIR            FLAG_GPIO_1 + 0x00010000

#define IO_TS6               FLAG_GPIO_1 + 0x00008000
#define O_MODE_SEL           FLAG_GPIO_1 + 0x00004000
#define O_MODE_SEL1          FLAG_GPIO_1 + 0x00002000
#define O_MODE_SEL2          FLAG_GPIO_1 + 0x00001000

#define O_FAN_EN             FLAG_GPIO_1 + 0x00000800
#define O_HMC7044_RESET      FLAG_GPIO_1 + 0x00000400
#define I_HMC7044_LOCKED     FLAG_GPIO_1 + 0x00000200
#define I_HMC7044_PHASE      FLAG_GPIO_1 + 0x00000100

#define O_LMX_ADC_RSTN       FLAG_GPIO_1 + 0x00000080
#define I_LMX_ADC_MUXOUT     FLAG_GPIO_1 + 0x00000040
#define O_LMX_ADC_SYSREFREQ  FLAG_GPIO_1 + 0x00000020
#define O_LMX_DAC_RSTN       FLAG_GPIO_1 + 0x00000010

#define I_LMX_DAC_MUXOUT     FLAG_GPIO_1 + 0x00000008
#define O_LMX_DAC_SYSREFREQ  FLAG_GPIO_1 + 0x00000004
#define O_DAC_RSTN           FLAG_GPIO_1 + 0x00000002
#define I_DAC_IRQ            FLAG_GPIO_1 + 0x00000001 // 0


int init_gpio();

void gpio_startup();

int read_gpio(u32 gpio_io);
void set_gpio(u32 gpio_io);
void reset_gpio(u32 gpio_io);

void set7044();
void reset7044();

void gpio_loopback();

void gpio_normal();

void gpio_rx_out();

void gpio_tx_out();

#endif /* SRC_GPIO_GWGPIO_H_ */
